home *** CD-ROM | disk | FTP | other *** search
- //////////////////////////////////////////////////
- // //
- // NameTester.c //
- // //
- // © 1996 1 A.M. Productions and J. McCornack //
- // September 9,1996 //
- // //
- // This demonstrates serial encoding based //
- // on ASCII values of the user's name. //
- // //
- // This demo compares the user's name and //
- // registration number from NameNumerator. //
- // //
- //////////////////////////////////////////////////
-
- #ifndef __MAIN__
- #include "NameTester.h"
- #endif
-
- void main()
- {
- InitGraf(&qd.thePort);
- InitFonts();
- FlushEvents(everyEvent,0);
- InitWindows();
- InitMenus();
- TEInit();
- InitDialogs(0L);
-
- GetNameAndNum(); // Ask the user for a name and serial number
-
- FlushEvents(everyEvent,0);
- }
-
- void GetNameAndNum()
- {
- short itemHit, itemType;
- long i;
- Handle itemHandle;
- Rect itemRect;
- Str255 nameStr, nameNum, serialStr;
- DialogPtr dialog;
- GrafPtr oldPort;
- Boolean gotAMatch;
-
- GetPort(&oldPort);
- dialog=GetNewDialog(131,nil,(WindowPtr)-1); //131 is NameTester's dialog ID#
- ShowWindow(dialog);
- SelectWindow(dialog);
- SetPort(dialog);
- GetDialogItem(dialog,3,&itemType,&itemHandle,&itemRect);
- SetDialogItemText(itemHandle,"\pyour name here");
- GetDialogItem(dialog,4,&itemType,&itemHandle,&itemRect);
- SetDialogItemText(itemHandle,"\pserial # here");
-
- nameStr[0] = 24;
- nameStr[25] = '\0';
- nameNum[0] = 6;
- nameNum[7] = '\0';
- itemHit=-1;
-
- while (itemHit !=2)
- {
- ModalDialog(StdFilter, &itemHit);
-
- if (itemHit == 2)
- {
- SetPort(oldPort);
- DisposeDialog(dialog);
- ExitToShell();
- }
- if (itemHit == 1)
- {
- for (i=1;i <= 24; i++)
- nameStr[i] = '\0';
- for (i=1;i <= 6; i++)
- serialStr[i] = '\0';
- GetDialogItem(dialog,3,&itemType,&itemHandle,&itemRect);
- GetDialogItemText(itemHandle,nameStr);
- GetValue(nameStr, nameNum);
- GetDialogItem(dialog,4,&itemType,&itemHandle,&itemRect);
- GetDialogItemText(itemHandle,serialStr);
- if (GoodName(nameStr) == false)
- {
- GetDialogItem(dialog,5,&itemType,&itemHandle,&itemRect);
- SetDialogItemText(itemHandle,"\pUse a real name");
- }
- else
- {
- gotAMatch = true;
- for (i=1;i <= 6; i++)
- if (nameNum[i] != serialStr[i])
- gotAMatch = false;
- if (gotAMatch)
- {
- GetDialogItem(dialog,5,&itemType,&itemHandle,&itemRect);
- SetDialogItemText(itemHandle,"\pGood! Play in peace.");
- SysBeep(1);
- }
- else
- {
- GetDialogItem(dialog,5,&itemType,&itemHandle,&itemRect);
- SetDialogItemText(itemHandle,"\pNo good. Oh well…");
- }
- }
- }
- }
- }
-
- pascal Boolean StdFilter(DialogPtr theDialog, EventRecord *theEvent, short *itemHit)
- {
- char theChar;
- short itemKind;
- Handle itemHandle;
- Rect itemBox;
-
- switch ( theEvent->what )
- {
- case keyDown:
- theChar = (char)(theEvent->message & charCodeMask);
- if ( (((theEvent->modifiers & cmdKey) != 0) && (theChar == '.')) || (theChar == (char)27) ) /*cmd-. or ESC*/
- {
- *itemHit = kCancelButton;
- GetDItem(theDialog, kCancelButton, &itemKind, &itemHandle, &itemBox);
- HiliteControl((ControlHandle)itemHandle, 1);
- return true;
- }
- if ( (theChar == (char)13) || (theChar == (char)3) )
- {
- *itemHit = kOKButton;
- GetDItem(theDialog, 1, &itemKind, &itemHandle, &itemBox);
- HiliteControl((ControlHandle)itemHandle, kOKButton);
- return true;
- }
- break;
- case updateEvt:
- BeginUpdate(theDialog);
- SetPort(theDialog);
- DrawDialog(theDialog);
- GetDItem(theDialog, kOKButton, &itemKind, &itemHandle, &itemBox);
- InsetRect(&itemBox, -4, -4);
- PenSize(3, 3);
- FrameRoundRect(&itemBox, 15, 15);
- EndUpdate(theDialog);
- break;
- }
- return false;
- }
-
-
- void GetValue(Str255 valStr, Str255 retStr)
- {
- long i;
-
- for (i=1; i <= 6; i++) //Load first six character codes
- retStr[i] = (valStr[i] % 10) + '0';
- for (i=1; i <= 6; i++) //Load next six character codes (7 through 12)
- retStr[i] = ((retStr[i] - '0' + valStr[i+6]) % 10) + '0';
- for (i=1; i <= 6; i++) //Load third six character codes (13 through 18)
- retStr[i] = ((retStr[i] - '0' + valStr[i+12]) % 10) + '0';
- for (i=1; i <= 6; i++) //Load first six character codes (19 through 24)
- retStr[i] = ((retStr[i] - '0' + valStr[i+18]) % 10) + '0';
-
- retStr[1] = ((retStr[1] - '0' + 2) % 10) + '0'; //Add 257458 (kinda…)
- retStr[2] = ((retStr[2] - '0' + 5) % 10) + '0';
- retStr[3] = ((retStr[3] - '0' + 7) % 10) + '0';
- retStr[4] = ((retStr[4] - '0' + 4) % 10) + '0';
- retStr[5] = ((retStr[5] - '0' + 5) % 10) + '0';
- retStr[6] = ((retStr[6] - '0' + 8) % 10) + '0';
- }
-
- Boolean GoodName(Str255 testName)
- {
- long i, valueHolder = 0;
-
- for (i=1; i <= 6; i++)
- {
- valueHolder = testName[i];
- if (valueHolder == 0) //Verify at least 6 chars were entered.
- return false;
- }
-
- valueHolder = 0; //Start counting letters at 0
- for (i=1; i <= 10; i++)
- if ((testName[i] >= 'A') && (testName[i] <= 'z'))
- valueHolder++; //Verify at least 5 of the first 10 chars…
- if (valueHolder >=5) //…are letters of the alphabet.
- return true;
- else
- return false;
- }